# 装饰器：装饰，装修，房子就可以住，如果装修，不影响你住，而且体验更加，让你生活中增加了很多功能：洗澡，看电视，沙发。
# 器：工具。
# 开放封闭原则：
# 开放：对代码的拓展开放的， 更新地图，加新枪，等等。
# 封闭：对源码的修改是封闭的。闪躲用q。就是一个功能，一个函数。 别人赤手空拳打你，用机枪扫你，扔雷.....这个功能不会改变。

# 装饰器：完全遵循开放封闭原则。
# 装饰器： 在不改变原函数的代码以及调用方式的前提下，为其增加新的功能。
# 装饰器就是一个函数。


# 版本一： 大壮 写一些代码测试一下index函数的执行效率。
#版本一有问题，如果测试别人的代码，必须重新复制粘贴
# import time
# def index():
#     '''很多代码'''#模拟网络延迟或者代码效率
#     time.sleep(2)
#     print('欢迎登录博客园')
# #print(time.time())#格林威治时间
# def diary():
#     time.sleep(3)
#     print('欢迎登录日记页面')
# start_time=time.time()
# index()
# end_time=time.time()
# print(end_time-start_time)
#
# start_time=time.time()
# diary()
# end_time=time.time()
# print(end_time-start_time)
#
# start_time=time.time()
# index()
# end_time=time.time()
# print(end_time-start_time)

#版本二：利用函数解决代码重复性
# import time
# def index():
#     '''很多代码'''#模拟网络延迟或者代码效率
#     time.sleep(2)
#     print('欢迎登录博客园')
# #print(time.time())#格林威治时间
# def diary():
#     time.sleep(3)
#     print('欢迎登录日记页面')
# def timmer(f):
#     start_time = time.time()
#     f()
#     end_time = time.time()
#     print(f'测试本函数的执行效率{end_time-start_time}')
# timmer(index)
# 版本二还是有问题： 原来index函数源码没有变化，给原函数添加了一个新的功能测试原函数的执行效率的功能。
# 满足开放封闭原则么？原函数的调用方式改变了。

#版本三：不能改变将原函数的调用方式
import time
def index():
    '''很多代码'''#模拟网络延迟或者代码效率
    time.sleep(2)
    print('欢迎登录博客园')
#print(time.time())#格林威治时间
def diary():
    time.sleep(3)
    print('欢迎登录日记页面')
def timmer(f):
    def inner():
        start_time = time.time()
        f()
        end_time = time.time()
        print(f'测试本函数的执行效率{end_time-start_time}')
    return inner
index=timmer(index)
index()


def timmer(f):
    def inner():
        start_time = time.time()
        f()
        end_time = time.time()
        print(f'测试本函数的执行效率{end_time-start_time}')
    return inner
@timmer
def index():
    '''很多代码'''#模拟网络延迟或者代码效率
    time.sleep(2)
    print('欢迎登录博客园')
index()






















